#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
//void reverse_string(char* string)
//{
//	int len = strlen(string);
//	char tmp = *string;
//	*string = *(string + len - 1);
//	*(string + len - 1) = '\0';
//	if (strlen(string + 1) >= 2)
//	{
//		reverse_string(string + 1);
//	}
//	*(string + len - 1) = tmp;
//
//}
//int main()
//{
//	char arr[] = { "abcdefg" };
//	reverse_string(arr);
//	printf("%s", arr);
//
//
//	return 0;
//}

//字符串逆序（递归实现）
//编写一个函数 reverse_string(char* string)（递归实现）
//实现：将参数字符串中的字符反向排列，不是逆序打印。
//要求：不能使用C函数库中的字符串操作函数。
//比如 :
//char arr[] = "abcdef";
//逆序之后数组的内容变成：fedcba

//非递归方式
//int my_strlen(char arr[])
//{
//	int count = 0;
//	while (1)
//	{
//		if (*arr != '\0')
//		{
//			count++;
//			arr++;
//		}
//		else
//		{
//			return count;
//		}
//	}
//}
//int my_strlen(char* str)
//{
//    int count = 0;
//    while ('\0' != *str)
//    {
//        count++;
//        str++;
//    }
//    return count;
//}
//递归方式实现
//int my_strlen(char* str)
//{
//	if (*str == '\0')
//	{
//		return 0;
//	}
//	else
//	{
//		return 1 + my_strlen(str + 1);
//	}
//}
//int my_strlen(char* str)
//{
//	if ('\0' == *str)
//		return 0;
//	else
//		return 1 + my_strlen(1 + str);
//}
//int main()
//{
//	char arr[] = { "abcdefg" };
//	int ret = my_strlen(arr);
//	printf("%d", ret);
//	return 0;
//}
//strlen的模拟（递归实现）
//递归和非递归分别实现strlen

//void print(unsigned int n)
//{
//	if (n > 9)
//	{
//		print(n / 10);
//		printf("%d ", n % 10);
//	}
//	else
//	{
//		printf("%d ", n);
//	}
//}
//
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	print(n);
//	return 0;
//}
/*
思路：
			  N   N <= 9
Print(N)
			  Print(N-1), 打印N
*/


int main()
{
	/*char arr5[] = { 'a','b','c' };
	char arr6[] = { 'a','b','c' ,'\0' };
	printf("%s", arr5);
	printf("%s", arr6);*/

	//int arr1[3][4] = { 1,2,3,4 };//1234
	//							 //0000
	//                             //0000


	//int arr2[3][4] = { {1,2},{4,5}};//1200
	//                                //4500
	//                                //0000
	//
	//int arr3[][4] = { {2,3},{4,5} };//2300
	//                                //4500
//	return 0;
//}
	//void bubble_sort(int* arr, int sz)//这里的arr的本质是指针
	//{
	//	int i = 0;
	//	for (i = 0; i < sz - 1; i++)
	//	{
	//		int j = 0;
	//		//每一趟开始前就假设已经有序了
	//		int flag = 1;
	//		//一趟每部比较的对数
	//		for (j = 0; j < sz - 1 - i; j++)
	//		{
	//			if (arr[j] > arr[j + 1])
	//			{
	//				//交换
	//				int tmp = arr[j];
	//				arr[j] = arr[j + 1];
	//				arr[j + 1] = tmp;
	//				flag = 0;
	//			}
	//		}

	//		if (flag == 1)
	//			break;
	//	}
	//}

	//int main()
	//{
	//	int arr[10] = { 0 };
	//	//输入
	//	int i = 0;
	//	int sz = sizeof(arr) / sizeof(arr[0]);
	//	for (i = 0; i < sz; i++)
	//	{
	//		scanf("%d", &arr[i]);
	//	}
	//	//冒泡排序 - 升序
	//	//趟数
	//	//arr作为数组进行了传参
	//	//数组传参，传递的是地址,传递的是首元素的地址
	//	//
	//	bubble_sort(arr, sz);//arr 是数组首元素的地址

	//	//输出
	//	for (i = 0; i < sz; i++)
	//	{
	//		printf("%d ", arr[i]);
	//	}

	//	return 0;
//